თავი 2. ADO-ს ობიექტური მოდელი

სიობრივ  მართვის ელემენტებში ამორჩევის შედეგების გამოტანა

ჩანაწერების დამატება ცხრილში სიობრივი მართვის ელემენტის ComboBox-ის გამოყენებით

მართვის ელემენტი ComboBox სიობრივი მართვის ელემენტის და ველის თვისებების მატარებელია.   მასში მონაცემების ჩაწერა და ამორჩევაა შესაძლებელი. მონაცემების ბაზებთან მუშაობისას ხშირად წარმოიქმნება მთავარ და დამოკიდებულ ცხრილებში ახალი ჩანაწერების დამატება. მაგალითად, სტუდენტების არსებულ სიას დაემატა ახალი სტუდენტი, რომლის შესახებ, ცხადია ინფორმაცია დამატებულ უნდა იქნეს ცხრილში (ცხრილში ჩაწერილია ინფორმაცია სტუდენტის შესახებ), ან საწყობში მიიღეს ისეთი საქონელი, რომლის დასახელება მონაცემების ბაზაში არ იყო. ორივე შემთხვევაში აუცილებელია სისტემის მიერ გაგებულ იქნეს ახალი საქონლის დასახელების, სტუდენტის  გვარის არარსებობა და გამოტანილ იქნეს შეკითხვა ახალი ჩანაწერის ბაზაში დამატების შესახებ. ამ სიტუაციის ფიქსირება ხორციელდება ComboBox-ის მოვლენით NotInList. ამ მოვლენას ორი არგუმენტი აქვს: NewData (ახალი მონაცემები) და Response (გამოძახილი), რომლებიც გამოიყენება პროგრამის საშუალებით სიაში ახალი ჩანაწერის დასამატებლად. არგუმენტის NewData ComboBox-ის ველში ჩაწერილი ახალი ჩანაწერის მნიშვნელობაა. არგუმენტით ხორციელდება მოვლენის -ახალი ჩანაწერის მნიშვნელობის ჩაწერის, დამუშავება. მისი მნიშვნელობებია: acDataErrorDisplay acDataErrorContinue   acDataErrAdded.
  • acDataErrorDisplay – უჩვენებს სისტემის შეტყობინებას მონაცემების შეცდომის შესახებ. ეს მნიშვნელობა გამოიყენეთ სიაში ახალი ჩანაწერის დამატებისას. იგი Response-ს გაჩუმებით აქვს მინიჭებული;
  • acDataErrorContinue   – როგორც წესი სიაში ახალი ჩანაწერის დამატებაზე მომხმარებლის თანხმობაა საჭირო. დადებითი პასუხის შემთხვევაში არგუმენტს  Response-ს ენიჭება მნიშვნელობა acDataErrAdded, წინააღმდეგ შემთხვევაში – acDataErrorContinue;   
  • acDataErrAdded – არგუმენტის Response-ს ეს მნიშვნელობა გვიჩვენებს მონაცმების ბაზაში – ცხრილში არგუმენტის NewData-ს მნიშვნელობა დაემატებას.

მაგალითი 2.8- ცხრილში და ComboBox-ის სიაში ახალი ჩანაწერის დამატება ComboBox-ის მოვლენით NotInList
დაუშვათ ცხრილი მხოლოდ ერთი სვეტია – საქონლის დასახელება. ცხრილში ჩაწერილია მონაცემები: ვაშლი, მსხალი, ატამი, თხილი. საჭირო გახდა ცხრილში საქონლის ახალი დასახლების დამატება, მაგ., ლეღვი.
  • დააპროექტეთ ფორმა. მასზედ დაიტანეთ მართვის ელემნტი ComboBox სახელით Lsaqoneli;
  • ფორმის მოდულში ჩაწერეთ პროგრამა, რომელიც უზრუნველყოფს ფორმის ჩატვირთვისას ComboBox-ის მონაცემებით შევსებას:

Private Sub Form_Load()
Dim kit As String
kit = „select * From tbsaqoneli“
Debug.Print kit
With Me.Lsaqoneli
.ColumnCount = 1
.ColumnHeads = True
.ColumnWidths = „2in“
.RowSourceType = „Table/Query“
.RowSource = kit
End With
End Sub

  • ComboBox-ის მოვლენასთან NotInList დააკავშირეთ პროგრამა:

Private Sub Lsaqoneli_NotInList(NewData As String, Response As Integer)
Dim kav As New ADODB.Connection
Dim strresp As Byte
Dim kit As String
Set kav = CurrentProject.Connection
strresp = MsgBox(„gsurT damateba „ & NewData, vbYesNo)
If strresp = vbYes Then
kit = „INSERT INTO tbsaqoneli(das) VALUES (‘“ & NewData & „’)“ 
’გამოიყენება მონაცემების ბაზაში ჩანაწერის დამატების SQL-ის ინსტრუქცია. ცვლადი NewData შეიცავს ComboBox-ის ველში ჩაწერილ მნიშვნელობას 
kav.Execute kit
Response = acDataErrAdded
ElseIf strresp = vbNo Then
Response = acDataErrContinue
Me.Lsaqoneli.Undo
End If
End Sub        

  • გააღეთ ფორმა შესრულების რეჟიმში და ComboBox-ის ველში ჩაწერეთ დასახელება ,,ლეღვი” და დააჭირეთ კლავიშს Enter-ს ან Tab-ს. 
შესრულდება პროგრამა Private Sub Lsaqoneli_NotInList (NewData As String, Response As Integer). საქონლის ახალი დასახელება ,,ლეღვი”  დაემატება ცხრილის ჩანაწერებს და გამოჩნდება ფორმაზე, ComboBox-ში/სურ. 2.5/.

სურ. 2.5. სიაში ახალი ელემენტის ჩანაწერის დამატება
მე-5 მაგალითში განხილულია სიტუაცია, როდესაც ცხრილი ერთი სვეტისგან შედგება. უმრავლეს შემთხვევაში ცხრილში რამდენიმე სვეტია მაგ., ცხრილი tbstudenti 5 სვეტისგან შედგება, არგუმენტში NewData, კი მხოლოდ ერთი ველის მნიშვნელობა უნდა იქნეს ჩაწერილი.

მაგალითი 2.8 ცხრილში და ComboBox-ის სიაში ახალი ჩანაწერის დამატება ComboBox-ის მოვლენით NotInList და ერთი ფორმიდან მეორეში არგუმენტის გადაცემა
მოცემულია ორი ცხრილი სახელებით tbstudenti, tbsaati. ცხრილების სტრუქტურა მოცემულია ცხრილში 2.10. 

სვეტების დასახელება
აღნიშვნა
ცხრილიი tbstudenti
სტუდენტის საიდენტიფიკაციო ნომერი
nomeri
გვარი
gvari
სახელი
saxeli
კურსი
kursi
ჯგუფი
jgufi
ცხრილი tbsaati
სტუდენტის საიდენტიფიკაციო ნომერი
nomeri
თარიღი
tar
საგნის კოდი
sagkodi
გაცდენილი საათები
gacsaati
ცხრილები დაკავშირებული არიან ველით nomeri, დაკავშირების ტიპია 1:∞. მთავარი ცხრილია tbstudenti, დამოკიდებული კი – tbsaati. 
    •        დააპროექტეთ ფორმები და დააკავშირეთ ისინი ცხრილებთან, კერძოდ: Fstudentitbstudenti,  Fsaati tbsaati. ფორმაზე Fsaati ველების სტუდენტის საიდენტიფიკაციო ნომერი, თარიღი, საგნის კოდი, გაცდენილი საათები დამატებით დაიტანეთ მართვის ელემენტი ComboBox და მიანიჭეთ სახელი Lsia;
    •        ფორმის Fsaati მოდულში ჩაწერეთ პროგრამები:
Private Sub Form_Load() ’ ფორმის ჩატვირთვისას მართვის ელემენტი Lsia შეივსება ცხრილში tbsaati არსებული მონაცემებით
Dim kit As String
kit = „select * From tbsaati“
With Me.Lsia
.ColumnCount = 4
.ColumnHeads = True
.ColumnWidths = „1in;1in;0.5in;0.5in“
.RowSourceType = „Table/Query“
.RowSource = kit
End With
End Sub

Private Sub Lsia_AfterUpdate() ’Lsia-ში არსებულ ერთ-ერთ სტრიქონზე დაწკაპუნებით ამოირჩევა ეს სტრიქონი და მნიშვნელობები ჩაიწერება ფორმაზე დატანილ ველებში
Dim kit As String
kit = „Select * From tbsaati WHERE sagkodii = „ & Me.Lsia.Column(2) & „ and nomeri =“ & Me.Lsia.Column(0) & ”“ 
ყურადღება მიაქციეთ nomeri =“ & Me.Lsia.Column(0) & ” ჩაწერის სინტაქსს. აქ გამოყენებული არ არის ნიშანი ’ , იმიტომ, რომ შეკითხვაში ციფრული მონაცემის მნიშვნელობა არ უნდა იყოს მოთავსებული ’ ნიშნებში. სტრიქონის ტიპის მონაცემის შემთხვევაში სიმბოლოს             ’ (აპსოსტროფი) გამოყენება აუცილებელია. თარიღის ფორმატისას კი უნდა დაიწეროს #, ამავე დროს ცხრილში თარიღი ჩაწერის ფორმატი შემდეგია 00/00/00
Form_Fsaati.RecordSource = kit
End Sub
Private Sub Lsia_NotInList(NewData As String, Response As Integer)  
’Lsia-ში ახალი ნომრის ჩაწერისას წარმოიქმნება მოვლენა NotInList
 Dim strresp As Byte
 strresp = MsgBox(„gsurT damateba „ & NewData, vbYesNo) ’გამოიტანება შეკითხვა ჩანაწერის დამატების შესახებ
If strresp = vbYes Then
 DoCmd.OpenForm „Fstudenti“, acNormal, , , acFormAdd, acDialog, NewData 
 ’ შეკითხვაზე დადებითი პასუხის შემთხვევაში გაიღება ფორმა Fstudenti და ფორმას გადაცემა არგუმენტი  NewData  
Response = acDataErrContinue
ElseIf strresp = vbNo Then
Response = acDataErrContinue
Me.Lsia.Undo
End If
End Sub
   •        ფორმის Fstudenti მოდულში ჩაწერეთ პროგრამები:  გაგრძელება იხ. შემდეგ გვერდზე